home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / emulator / bsvc-1.000 / bsvc-1 / bsvc-1.0.4 / src / SimHector / cpu / ControlUnit.hxx < prev    next >
Text File  |  1995-07-26  |  4KB  |  95 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // ControlUnit.hxx - Control Unit for the Hector 1600 CPU
  4. //
  5. // By: Bradford W. Mott
  6. // December 3,1993
  7. //
  8. ///////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifndef CONTROLUNIT_HXX
  11. #define CONTROLUNIT_HXX
  12.  
  13. #include "String.h"
  14. #include "DataPath.hxx"
  15.  
  16. ///////////////////////////////////////////////////////////////////////////////
  17. // The Control Unit for the Hector 1600 CPU
  18. ///////////////////////////////////////////////////////////////////////////////
  19. class ControlUnit {
  20.   private:
  21.     // Mnemonic to be added to trace record after opcode decoded and executed
  22.     String mnemonic;
  23.  
  24.     // Routine to Execute instructions
  25.     const char* ControlUnit::ExecuteGroup1(int trace_flag);
  26.     const char* ControlUnit::ExecuteGroup2(int trace_flag);
  27.     const char* ControlUnit::ExecuteGroup3(int trace_flag);
  28.     const char* ControlUnit::ExecuteBRA(int trace_flag);
  29.     const char* ControlUnit::ExecuteJSR(int trace_flag);
  30.     const char* ControlUnit::ExecuteSWAP(int trace_flag);
  31.     const char* ControlUnit::ExecuteCLR(int trace_flag);
  32.     const char* ControlUnit::ExecuteMOVE(int trace_flag);
  33.     const char* ControlUnit::ExecuteTEST(int trace_flag);
  34.     const char* ControlUnit::ExecuteSTF(int trace_flag);
  35.     const char* ControlUnit::ExecuteLDF(int trace_flag);
  36.     const char* ControlUnit::ExecutePUSH(int trace_flag);
  37.     const char* ControlUnit::ExecuteSEC(int trace_flag);
  38.     const char* ControlUnit::ExecuteCLC(int trace_flag);
  39.     const char* ControlUnit::ExecuteSEI(int trace_flag);
  40.     const char* ControlUnit::ExecuteCLI(int trace_flag);
  41.     const char* ControlUnit::ExecuteRTI(int trace_flag);
  42.     const char* ControlUnit::ExecuteSWI(int trace_flag);
  43.     const char* ControlUnit::ExecuteEXCH(int trace_flag);
  44.     const char* ControlUnit::ExecuteSRCH(int trace_flag);
  45.  
  46.     // Register transfer functions
  47.     const char* reg_to_reg(int reg_a, int reg_b);
  48.     const char* reg_indirect_to_reg(int reg_a, int reg_b);
  49.     const char* reg_to_reg_indirect(int reg_a, int reg_b);
  50.     const char* reg_to_mar_indirect(int reg);
  51.     const char* mar_indirect_to_reg(int reg);
  52.     const char* mdr_to_mar_indirect();
  53.     const char* inc_reg(int reg);
  54.     const char* reg_op_reg_to_reg(int reg_a, int reg_b);
  55.     const char* reg_op_reg_to_mdr(int reg_a, int reg_b);
  56.     const char* reg_plus_reg_to_reg(int reg_a, int reg_b);
  57.     const char* reg_plus_reg_to_mar(int reg_a, int reg_b);
  58.     const char* dec_reg(int reg);
  59.     const char* reg_op_reg(int reg_a, int reg_b);
  60.     const char* op_reg_to_reg(int reg);
  61.     const char* op_reg_to_mdr(int reg);
  62.     const char* swap_reg_to_reg(int reg_a, int reg_b);
  63.     const char* swap_reg_to_mdr(int reg);
  64.     const char* clr_reg(int reg);
  65.     const char* clr_mdr();
  66.     const char* flags_to_reg(int reg);
  67.     const char* flags_to_mdr();
  68.     const char* reg_to_flags(int reg);
  69.     const char* pass_reg_to_reg(int reg_a, int reg_b);
  70.     const char* reg_to_reg_indirect_with_inc(int reg_a, int reg_b);
  71.     const char* mdr_to_mar_indirect_with_inc(int reg);
  72.     const char* reg_to_reg_indirect_with_dec(int reg_a, int reg_b);
  73.  
  74.     // Decode and execute the instruction in IR
  75.     const char* DecodeAndExecute(int trace_flag); 
  76.  
  77.   public:
  78.     // CPU's data path
  79.     DataPath& data_path;
  80.  
  81.     // Class Constructor
  82.     ControlUnit(DataPath& d)
  83.         : data_path(d)
  84.     {}
  85.  
  86.     ~ControlUnit()
  87.     {}
  88.  
  89.     // Fetch, decode, and execute the next instruction
  90.     const char* ExecuteInstruction(String& trace_record, int trace_flag);
  91.  
  92. };
  93. #endif
  94.  
  95.